package algo.math.evaluator.tokenizer.interfaces;

/**
 * Represent a token in an expression
 */
public interface IToken {

	/**
	 * Gets the type.
	 *
	 * @return the type
	 */
	public TokenType getType ();
	
	/**
	 * Sets the type.
	 *
	 * @param type the new type
	 */
	public void setType (TokenType type);
	
	/**
	 * Sets the value.
	 *
	 * @param value the new value
	 */
	public void setValue(String value);
	
	/**
	 * Gets the value.
	 *
	 * @return the value
	 */
	public String getValue();
	
    /**
     * The types available to a token
     */
    public enum TokenType
    {
        
        NOTHING,
        
        PARENTHESIS,
        
        VARIABLE,
        
        CONSTANT,
        
        FUNCTION,
        
        OPERATOR
    }

    /**
     * Available operators
     */
    public enum OperatorSymbol
    {
    	
	    NOTHING,
        
        PLUS,
        
        MINUS,
        
        MULTIPLY,
        
        DIVIDE,
        
        MODULUS,
        
        FACTORIAL,
        
        AND,
        
        OR,
        
        NOT,
        
        XOR,
        
        OPEN_PARENTHESIS,
        
        CLOSE_PARENTHESIS
    }
	
	
}
